package com.cw.DesignModel23.Structural.DecoratorPattern.Decorator1;

/**
 * 1 . 案例需求 :
 * ① 实体类对象 : 刚入学的学生 , 默认学习大学公共课 ,
 * ② 装饰类对象 : 如果是计算机专业的学生 , 还要继续学习计算机专业课程 ,
 * ③ 装饰类对象 : 如果是音乐专业的学生 , 需要继续学习音乐专业课程 ,
 * ④ 二次装饰类对象 : 如果是先学习计算机 , 然后专修音乐 , 那么需要先学习计算机专业课程 , 然后学习音乐专业课程 ;
 *
 * 测试装饰者模式 : 其中测试了没有装饰的实体类 , 将其装饰成计算机专业学生 , 将其装饰成音乐专业学生 , 将其装饰成计算机转音乐专业的学生 ;
 */
public class Main {

    public static void main(String[] args) {

        //刚入学的学生
        Student student = new Student();
        System.out.println(student.studyCourses());

        //大二学习计算机专业课程
        AbstractStudent computerStudent = new ComputerStudentDecorator(student);
        System.out.println(computerStudent.studyCourses());

        //大二学习音乐专业课程
        AbstractStudent musicStudent = new MusicStudentDecorator(student);
        System.out.println(musicStudent.studyCourses());

        //先学计算机 , 专修音乐的学生
        AbstractStudent computerMusicStudent = new ComputerStudentDecorator(computerStudent);
        System.out.println(computerMusicStudent.studyCourses());

    }
}


